import router from '@/router'
import axios from 'axios'
import errorCode from '@/utils/errorCode'
import store from '@/store'

const request = axios.create({
    // 如果在执行异步请求的时候，如果baseUrl
    //baseURL: "http://api.txnh.net/admin",
    baseURL: "/admin",
    // timeout` 指定请求超时的毫秒数(0 表示无超时时间)
    timeout: 10000,
    // 默认就是会给请求头增加token 
    istoken: true
});


// 添加请求拦截器
request.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    if (config.istoken) {
        const token = store.getters["user/getToken"];
        const tokenUuid = store.getters["user/getTokenUuid"];
        const userId = store.getters["user/getUserId"];
        if (token) {
            config.headers["token"] = ["pugbear_", token].join("");
            config.headers["token_uuid"] = tokenUuid;
            config.headers["token_userid"] = userId;
        }
    }

    // 对象{id:1,name:'zhangsan'}转换成参数?id=1&name=zhangsan
    if (config.method === 'get' && config.params) {
        let url = config.url + '?' + tansParams(config.params);
        url = url.slice(0, -1);
        config.params = {};
        config.url = url;
    }

    // 防止表单重复提交的一个处理
    if (config.method === 'post' || config.method === 'put') {

    }

    return config;
}, function(error) {
    // 对请求错误做些什么
    console.log(error) // for debug
    return Promise.reject(error);
});



// 添加响应拦截器
request.interceptors.response.use((response) => {
    // 获取服务器的数据
    const res = response.data;
    const code = res.code || 200;
    // 获取错误信息
    if (code == 200) {
        return res;
    } else {
        // token失效
        if (code == '100608' || code == '100605' || code == '100609') {
            alert("会话已失效..." + msg);
            router.push("/toLogin");
            return;
        }

        //  挤下线
        if (code == "100610") {
            alert("你已经在别地方登录了");
            // 执行退出
            store.dispatch("user/toLogout");
            router.push("/toLogin");
            return;
        }

        const msgObj = errorCode[code] || { msg: res.msg, code: code, field: "" } || errorCode['default'];

        // 业务的错误 全部抛出在页面上去处理
        return Promise.reject(msgObj)
    }


}, function(err) {

    if (err.code == "ERR_BAD_RESPONSE") {
        alert("服务器脱离了地球表面，待会试试看...");
        return;
    }

    if (err.code == "ECONNABORTED") {
        alert("服务器脱离了地球表面，刷新试试看...");
        return;
    }

    // 这里是响应流的错误。
    if (err.response.code == 500 || err.response.code == 401 || err.response.code == 404) {
        alert("服务器脱离了地球表面..");
        router.push("/404");
        return;
    }

    // 对响应错误做点什么
    return Promise.reject(error);
});



/*导出异步请求 */
export default request;